package com.mazaiting.generator.controller;

import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BaseException;
import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.form.TemplateFileForm;
import com.mazaiting.generator.domain.query.TemplateFileQuery;
import com.mazaiting.generator.domain.vo.TemplateFileVO;
import com.mazaiting.generator.service.ITemplateFileService;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;
import com.mazaiting.web.domain.SingleResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Objects;

/**
 * 模板配置
 *
 * @author mazaiting
 * @datetime 2022-11-12 14:38:53
 */
@Slf4j
@RestController
@RequestMapping("generator/v1/templateFile")
@RequiredArgsConstructor
public class TemplateFileController {

    private final ITemplateFileService templateFileService;

    /**
     * 分页数据
     *
     * @param templateFileQuery 查询对象
     * @return 分页数据
     */
    @GetMapping("page")
    public BasePageVO<TemplateFileVO> page(@Valid TemplateFileQuery templateFileQuery) {
        return templateFileService.page(templateFileQuery);
    }

    /**
     * 根据 ID 获取数据
     *
     * @param id ID
     * @return 数据信息
     */
    @GetMapping("{id}")
    public TemplateFileVO get(@PathVariable("id") Long id) throws EmptyObjectException {
        return templateFileService.getInfoById(id);
    }

    /**
     * 保存数据
     *
     * @param templateFileForm 表单信息
     * @return true: 新增成功; false: 新增失败
     */
    @PostMapping
    public boolean save(@Valid TemplateFileForm templateFileForm) throws BaseException {
        if (Objects.nonNull(templateFileForm.getId())) {
            return templateFileService.update(templateFileForm);
        } else {
            return templateFileService.save(templateFileForm);
        }
    }

    /**
     * 删除修改数据
     *
     * @param ids id 列表
     * @return true: 删除成功; false: 删除失败
     */
    @DeleteMapping
    public boolean delete(@RequestParam("ids") String ids) {
        return templateFileService.deleteByIds(ids);
    }

    /**
     * 根据组 ID 查询组的文件列表
     *
     * @param groupId 模板组 ID
     * @return 模板组文件类型列表
     */
    @GetMapping
    public List<Option<Long>> listFiles(@RequestParam("groupId") String groupId) throws BusinessException {
        return templateFileService.listFiles(groupId);
    }

    /**
     * 查看文件内容
     * @param fileId 文件 ID
     * @return 文件内容
     */
    @GetMapping("content")
    public SingleResult getFileContent(@RequestParam("fileId") String fileId) throws EmptyObjectException {
        return templateFileService.getFileContent(fileId);
    }
}